package com.charles.bigdata.mapreduce.order;

import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Partitioner;

/**
 * 自定义分区器
 * <p>
 * 根据订单号的hashcode分区，可以保证订单号相同的在同一个分区，以便reduce中接收到同一个订单的全部记录。
 */
public class ItemIdPartitioner extends Partitioner<OrderBean, NullWritable> {

	@Override
	public int getPartition(OrderBean bean, NullWritable value, int numPartitions) {
		// 固定ID的订单bean，会发往相同的partition
		// 而且，产生的分区数，是会跟用户设置的reduce task数保持一致
		return (bean.getItemId().hashCode() & Integer.MAX_VALUE) % numPartitions;
	}

}